# 使用官方 Dart 镜像作为基础
FROM dart:3.8.1 AS builder

# 设置工作目录
WORKDIR /app

# 复制依赖声明文件
COPY pubspec.* ./
# 获取项目依赖（利用Docker缓存）
RUN dart pub get

# 复制项目所有源码
COPY . .
# 再次获取依赖（离线模式），确保与已复制的源码匹配
RUN dart pub get --offline
# 将 Dart 代码编译为可执行文件
RUN dart compile exe bin/main.dart -o bin/server

# （可选）如果需要更小的运行时镜像，可以考虑使用多阶段构建
# 例如，从一个精简的基础镜像（如alpine）开始，仅复制编译好的可执行文件及其运行时依赖
# 此处以一个简单的运行阶段为例：
FROM dart:3.8.1
WORKDIR /app
# 从构建阶段复制可执行文件
COPY --from=builder /app/bin/server /app/bin/
# 暴露容器运行时监听的端口（根据你的应用调整）
EXPOSE 8616
# 设置容器启动命令
CMD ["/app/bin/server"]